数据竞争:在并发/多线程程序中,两个或多个线程(或进程)在没有正确同步的情况下同时访问同一份共享数据,并且至少有一次是写操作,从而导致结果不确定、难以复现的错误。(在不同语言/内存模型下判定细节略有差异,但核心含义相同。)
/ˈdeɪtə reɪs/(也常读作 /ˈdætə reɪs/)
A data race can make the program crash randomly.
数据竞争可能导致程序随机崩溃。
Without a mutex, updating the shared counter from multiple threads introduces a data race that may only appear under heavy load.
如果没有互斥锁,多线程更新共享计数器会引入数据竞争,这种问题往往只在高负载下才暴露出来。
data(数据)+ race(竞赛/争抢)。这里的 race 是比喻用法,强调多个执行流“争抢”对同一数据的读写时机;由于缺乏同步,谁先谁后不可控,从而产生不可预测的结果。